class main {
    public int minimumTotal(List<List<Integer>> triangle) {
             int len=triangle.size();
             if(len==1){
                 return triangle.get(0).get(0);
             }
             int nowmin=triangle.get(0).get(0);//初始化当前层的最小值
             List<List<Integer>> ins=new ArrayList<>();//记录每个位置的最小值
              ins.add(new LinkedList<>()); 
              ins.get(0).add(triangle.get(0).get(0));
             for(int i=1;i<len;i++){
                   ins.add(new LinkedList<>()); 
               for(int j=0;j<triangle.get(i).size();j++){
                if(j==0){
                     ins.get(i).add(triangle.get(i).get(j)+ins.get(i-1).get(j)); 
                     nowmin=ins.get(i).get(j);
                }else if(j==triangle.get(i).size()-1){
                       ins.get(i).add(triangle.get(i).get(j)+ins.get(i-1).get(j-1));
                         nowmin=Math.min(nowmin,ins.get(i).get(j));
                }else{
                      ins.get(i).add(Math.min(triangle.get(i).get(j)+ins.get(i-1).get(j-1),
                        triangle.get(i).get(j)+ins.get(i-1).get(j)));  
                     int lastmin=Math.min(triangle.get(i).get(j)+ins.get(i-1).get(j-1),
                        triangle.get(i).get(j)+ins.get(i-1).get(j));
                        nowmin=Math.min(lastmin,nowmin);
                }
              }
            }
           return nowmin;
    }
}